home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2001 May / SGI Freeware 2001 May - Disc 1.iso / dist / patchSG0003911.idb / usr / share / catman / p_man / cat5 / abi.z / abi
Text File  |  2001-01-10  |  10KB  |  238 lines

  1. ABI(5)                                                Last changed: 1-28-99
  2.  
  3.  
  4. NNAAMMEE
  5.      AABBII - Application Binary Interface
  6.  
  7. IIMMPPLLEEMMEENNTTAATTIIOONN
  8.      IRIX systems
  9.  
  10. DDEESSCCRRIIPPTTIIOONN
  11.      This man page is a quick reference for the three Application Binary
  12.      Interfaces (ABI) that are supported by IRIX.
  13.  
  14. GGEENNEERRAALL IINNFFOORRMMAATTIIOONN
  15.      An ABI defines a system interface for executing compiled programs.  It
  16.      defines which Instruction Set Architectures (ISA) it supports as well
  17.      as defining object file formats and calling conventions.
  18.  
  19.      IRIX supports three ABIs:
  20.  
  21.      oo3322  The old 32-bit ABI which was standard on IRIX 5 systems.
  22.  
  23.      nn6644  The 64-bit ABI which was introduced on IRIX 6.0 systems.
  24.  
  25.      nn3322  The new high performance 32-bit ABI which was introduced on IRIX
  26.           6.2.
  27.  
  28.      Each of these ABIs defines unique interfaces which make it impossible
  29.      to link object files of one ABI with object files of another ABI.
  30.  
  31.      The MIPS ABI is a subset of the above mentioned oo3322 ABI and is
  32.      designed to provide application portability across a variety of vendor
  33.      platforms.  See the NOTES section which follows for reference
  34.      information.
  35.  
  36.      Default ABI and ISA settings described in this man page can be
  37.      overridden by changing the default settings for a given system,
  38.      contained in the //eettcc//ccoommppiilleerr..ddeeffaauullttss file; or by changing the
  39.      SSGGII__AABBII environment variable, which can be used to specify default ABI
  40.      values.
  41.  
  42. oo3322 IInnffoorrmmaattiioonn
  43.      The oo3322 ABI supports the mmiippss22 ISA (by default) and mmiippss11 ISA.  The
  44.      resulting program binary is in ELF32 format (COFF is no longer
  45.      supported) whose symbol table is in ..mmddeebbuugg format.  The oo3322 calling
  46.      convention allows a maximum of four registers ($$aa00....$$aa33) to be used to
  47.      pass integer arguments.
  48.  
  49.      When an oo3322 program executes, IRIX sets the FFRR bit in the status
  50.      register of the MIPS microprocessor to 0. Under this setting, only 16
  51.      double precision floating point registers are enabled.
  52.  
  53.      C language integer types (iinntt), long integer types (lloonngg), and pointer
  54.      types (cchhaarr **) are all 32-bits wide in programs compiled for this ABI.
  55.  
  56.      A program is compiled for the oo3322 ABI under the following
  57.      circumstances:
  58.  
  59.      * By default on systems that are not based on the R8000 (if the
  60.        environment variable SSGGII__AABBII is not set), as in this example:
  61.  
  62.           cc foo.c
  63.  
  64.      * By using the --3322 compilation flag; this overrides any SSGGII__AABBII
  65.        setting, as in this example:
  66.  
  67.           cc -32 foo.c
  68.  
  69.      * By using the --mmiippss22 or --mmiippss11 compilation flags, as in this example:
  70.  
  71.           cc -mips2 foo.c
  72.  
  73.      * By setting the SSGGII__AABBII environment variable to --3322 and doing a
  74.        default compilation, as in this example:
  75.  
  76.           setenv SGI_ABI -32
  77.           cc foo.c
  78.  
  79.      * By setting the default ABI to --3322 in the //eettcc//ccoommppiilleerr..ddeeffaauullttss
  80.        file, as in this example:
  81.  
  82.           cat /etc/compiler.defaults
  83.           -DEFAULT:abi=o32
  84.  
  85.      An oo3322 compilation generates certain predefined variables whose values
  86.      can be used by conditional compilation directives.  The names of these
  87.      variables and their values are as follows:
  88.  
  89.           _MIPS_FPSET  = 16
  90.           _MIPS_ISA    = 2
  91.           _ABIO32      = 1
  92.           _MIPS_SIM    = _ABIO32
  93.           _MIPS_SZINT  = 32
  94.           _MIPS_SZLONG = 32
  95.           _MIPS_SZPTR  = 32
  96.  
  97.      For more information about these predefined variables, see the
  98.      <<ssggiiddeeffss..hh>> include file.
  99.  
  100. nn6644 IInnffoorrmmaattiioonn
  101.      The nn6644 ABI supports the mmiippss44 ISA (by default) and mmiippss33 ISA.  The
  102.      resulting program binary is in ELF64 format whose symbol table is in
  103.      DWARF format.  The nn6644 calling convention is different from the oo3322
  104.      calling convention in that it allows a maximum of eight registers
  105.      ($$aa00....$$aa77) to be used to pass integer arguments. It also allows a
  106.      maximum of eight floating point registers to be used to pass floating
  107.      point arguments. A full description of this calling convention can be
  108.      found in the _M_I_P_S_p_r_o _6_4-_B_i_t _P_o_r_t_i_n_g _a_n_d _T_r_a_n_s_i_t_i_o_n _G_u_i_d_e.
  109.  
  110.      When an nn6644 program executes, IRIX sets the FFRR bit in the status
  111.      register of the MIPS microprocessor to 1. Under this setting, all 32
  112.      double precision floating point registers are enabled. This improves
  113.      performance, but old assembly code that accesses a double precision
  114.      floating point register as a pair (one even and one odd) of single
  115.      precision floating point registers will not work.
  116.  
  117.      C language integer types (iinntt) are 32 bits wide, while long integer
  118.      types (lloonngg), and pointer types (cchhaarr **) are both 64-bits wide in
  119.      programs compiled for this ABI.
  120.  
  121.      A program is compiled for the nn6644 ABI under the following
  122.      circumstances:
  123.  
  124.      * By default on systems that are based on the R8000 (if the
  125.        environment variable SSGGII__AABBII is not set), as in this example:
  126.  
  127.           cc foo.c
  128.  
  129.      * By using the --6644 compilation flag; this overrides any SSGGII__AABBII
  130.        setting, as in this example:
  131.  
  132.           cc -64 foo.c
  133.  
  134.      * By using the --mmiippss44 or --mmiippss33 compilation flags, as in this example:
  135.  
  136.           cc -mips4 foo.c
  137.  
  138.      * By setting the SSGGII__AABBII environment variable to --6644 and doing a
  139.        default compilation, as in this example:
  140.  
  141.           setenv SGI_ABI -64
  142.           cc foo.c
  143.  
  144.      * By setting the default ABI to --6644 in the //eettcc//ccoommppiilleerr..ddeeffaauullttss
  145.        file, as in this example:
  146.  
  147.           cat /etc/compiler.defaults
  148.           -DEFAULT:abi=64
  149.  
  150.      An nn6644 compilation generates certain predefined variables whose values
  151.      can be used by conditional compilation directives.  The names of these
  152.      variables and their values are as follows:
  153.  
  154.           _MIPS_FPSET  = 32
  155.           _MIPS_ISA    = 4
  156.           _ABI64       = 3
  157.           _MIPS_SIM    = _ABI64
  158.           _MIPS_SZINT  = 32
  159.           _MIPS_SZLONG = 64
  160.           _MIPS_SZPTR  = 64
  161.  
  162. nn3322 IInnffoorrmmaattiioonn
  163.      The nn3322 ABI supports the mmiippss33 (by default) and mmiippss44 ISA.  The
  164.      resulting program binary is in ELF32 format whose symbol table is in
  165.      DWARF format.  The nn3322 calling convention is the same as the nn6644
  166.      calling convention.  A full description of this calling convention can
  167.      be found in the _M_I_P_S_p_r_o _N_3_2 _A_B_I _H_a_n_d_b_o_o_k.
  168.  
  169.      When an nn3322 program executes, IRIX sets the FFRR bit in the status
  170.      register of the MIPS microprocessor to 1, just as it does for an nn6644
  171.      program.  Under this setting, all 32 double precision floating point
  172.      registers are enabled.  This has the same performance and
  173.      compatibility implications as with nn6644.
  174.  
  175.      C language integer types (iinntt), long integer types (lloonngg), and pointer
  176.      types (cchhaarr **) are all 32-bits wide in programs compiled for this ABI.
  177.  
  178.      A program is compiled for the nn3322 ABI under the following
  179.      circumstances:
  180.  
  181.      * By using the --nn3322 compilation flag; this overrides any SSGGII__AABBII
  182.        setting, as in this example:
  183.  
  184.           cc -n32 foo.c
  185.  
  186.      * By setting the SSGGII__AABBII environment variable to --nn3322 and doing a
  187.        default compilation, as in this example:
  188.  
  189.           setenv SGI_ABI -n32
  190.           cc foo.c
  191.  
  192.      * By setting the default ABI to --nn3322 in the //eettcc//ccoommppiilleerr..ddeeffaauullttss
  193.        file.
  194.  
  195.           cat /etc/compiler.defaults
  196.           -DEFAULT:abi=n32
  197.  
  198.      An N32 compilation will generate certain predefined variables whose
  199.      values can be used by conditional compilation directives.  The names
  200.      of these variables and their values are as follows:
  201.  
  202.           _MIPS_FPSET  = 32
  203.           _MIPS_ISA    = 4
  204.           _ABI64       = 3
  205.           _MIPS_SIM    = _NABI32
  206.           _MIPS_SZINT  = 32
  207.           _MIPS_SZLONG = 32
  208.           _MIPS_SZPTR  = 32
  209.  
  210. SSUUMMMMAARRYY TTAABBLLEE
  211.      The table below summarizes the characteristics of the three ABI's.
  212.  
  213.  
  214.      -----------------------------------------------------------------
  215.      Category                 O32           nn6644           nn3322
  216.      -----------------------------------------------------------------
  217.      Command Line Switch      --3322           --6644           --nn3322
  218.      Supported ISA            mmiippss11,,22       mmiippss 33,,44      mmiippss 33,,44
  219.      Default ISA              mmiippss22         mmiippss44         mmiippss33
  220.      Object file format       ELF32         ELF64         ELF32
  221.      Symbol table format                    DWARF         DWARF
  222.      Number of double         16            32            32
  223.      precision floating
  224.      point registers
  225.      sizeof(iinntt)              32            32            32
  226.      sizeof(lloonngg)             32            64            32
  227.      sizeof(cchhaarr **))           32            64            32
  228.      -----------------------------------------------------------------
  229.  
  230. SSEEEE AALLSSOO
  231.      The _M_I_P_S_p_r_o _N_3_2 _A_B_I _H_a_n_d_b_o_o_k and the _M_I_P_S_p_r_o _6_4-_B_i_t _P_o_r_t_i_n_g _a_n_d
  232.      _T_r_a_n_s_i_t_i_o_n _G_u_i_d_e provide information about the calling convention as
  233.      well as background on these ABIs.
  234.  
  235.      mmiippss__eexxtt(5)
  236.  
  237.      This man page is available only online.
  238.